/**
 * 时间工具类
 */
const DateUtils = {
    /**
     * 获取当前时间戳（毫秒）
     * @returns {number}
     */
    now() {
        return new Date().getTime();
    },

    /**
     * 格式化日期
     * @param {Date | number} date - 日期对象或时间戳
     * @param {string} format - 格式字符串，如 'yyyy-MM-dd hh:mm:ss'
     * @returns {string}
     */
    formatDate(date, format = 'yyyy-MM-dd hh:mm:ss') {
        const d = new Date(date);
        const o = {
            'M+': d.getMonth() + 1,
            'd+': d.getDate(),
            'h+': d.getHours(),
            'm+': d.getMinutes(),
            's+': d.getSeconds(),
            'q+': Math.floor((d.getMonth() + 3) / 3),
            S: d.getMilliseconds()
        };

        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
        }

        for (const k in o) {
            if (new RegExp('(' + k + ')').test(format)) {
                const str = o[k] + '';
                format = format.replace(
                    RegExp.$1,
                    RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length)
                );
            }
        }

        return format;
    },


    /**
     * 计算两个日期之间的天数差
     * @param {Date | number} date1 - 第一个日期
     * @param {Date | number} date2 - 第二个日期
     * @returns {number}
     */
    getDaysDiff(date1, date2) {
        const time1 = new Date(date1).getTime();
        const time2 = new Date(date2).getTime();
        return Math.abs(Math.floor((time2 - time1) / (24 * 60 * 60 * 1000)));
    },

    /**
     * 添加指定天数到日期
     * @param {Date | number} date - 原始日期
     * @param {number} days - 要添加的天数（支持负数）
     * @returns {Date}
     */
    addDays(date, days) {
        const result = new Date(new Date(date));
        result.setDate(result.getDate() + days);
        return result;
    },

    /**
     * 获取基于当前日期加减天数后的日期
     * @param {number} days - 天数，正数表示未来日期，负数表示过去日期
     * @returns {Date}
     */
    getDateByDays(days) {
        const now = new Date();
        now.setDate(now.getDate() + days);
        return now;
    }
};

export default DateUtils;
